PHP 8.3-এ নতুন একটি বৈশিষ্ট্য Readonly Classes যোগ করা হয়েছে, যা অবজেক্টের অবস্থা অপরিবর্তনীয় (immutable) রাখতে সাহায্য করে। readonly
ক্লাস ফিচারটি ব্যবহার করে আপনি ক্লাসের সমস্ত প্রপার্টি বা নির্দিষ্ট প্রপার্টি পরিবর্তন করা থেকে রক্ষা করতে পারেন, যা অবজেক্টের ডেটা নিরাপত্তা এবং সঠিকতা নিশ্চিত করতে অত্যন্ত কার্যকরী।
এটি PHP 8.1-এর readonly
প্রপার্টি ফিচারের একটি এক্সটেনশন, কিন্তু PHP 8.3-এ আপনি সম্পূর্ণ ক্লাসকেই readonly
হিসেবে চিহ্নিত করতে পারবেন, যার ফলে সেই ক্লাসের সমস্ত প্রপার্টি স্বয়ংক্রিয়ভাবে readonly
হয়ে যাবে।
readonly class
কী?Readonly classes এর মাধ্যমে আপনি একটি ক্লাস তৈরি করতে পারবেন, যেখানে সমস্ত প্রপার্টি শুধুমাত্র ইনিশিয়ালাইজ করার সময় সেট করা যাবে, এবং তারপর সেগুলি আর পরিবর্তন করা যাবে না। এটি সেই ক্লাসের মধ্যে অবজেক্টের অবস্থা অপরিবর্তনীয় রাখে, এবং এটি একটি কার্যকর প্যাটার্ন যখন আপনি কোনো ডেটা পরিবর্তন করতে চান না বা অবজেক্টটি immutable রাখতে চান।
readonly class MyClass {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
এখানে, readonly class
ব্যবহার করা হয়েছে, যার মানে হলো MyClass
ক্লাসের সমস্ত প্রপার্টি শুধুমাত্র কনস্ট্রাক্টর দ্বারা সেট করা যাবে, এবং পরে সেগুলি পরিবর্তন করা যাবে না।
PHP 8.3 এর পর, আপনি সম্পূর্ণ ক্লাসকেই readonly
হিসেবে চিহ্নিত করতে পারেন, যার ফলে সমস্ত প্রপার্টি readonly
হয়ে যাবে। এর মাধ্যমে আপনি নিশ্চিত করতে পারেন যে কোনো অবজেক্টের অবস্থা আর পরিবর্তন হবে না।
readonly class User {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
public function greet(): string {
return "Hello, my name is {$this->name} and I am {$this->age} years old.";
}
}
$user = new User("John", 25);
echo $user->greet(); // Output: Hello, my name is John and I am 25 years old.
$user->name = "Jane"; // Error: Cannot modify readonly property
এখানে, User
ক্লাসটি readonly
হিসেবে ডিফাইন করা হয়েছে। এর ফলে, আপনি কনস্ট্রাক্টরের মাধ্যমে প্রপার্টি মান সেট করতে পারেন, কিন্তু পরে সেগুলি পরিবর্তন করা যাবে না।
readonly
হবে, অর্থাৎ একবার সেট হওয়ার পর সেগুলি আর পরিবর্তন করা যাবে না।readonly
ক্লাস আপনাকে একটি immutable অবজেক্ট ডিজাইন করতে সহায়তা করে, যা কোডের নিরাপত্তা এবং সঠিকতা নিশ্চিত করে।readonly
ক্লাসের প্রপার্টি পরিবর্তনযোগ্য নয়, এটি ইনহেরিট্যান্সের মাধ্যমে কোনও পরিবর্তন বা অতিরিক্ত মান যোগ করা কঠিন করে তোলে।readonly
ক্লাস ব্যবহারে তা সম্ভব নয়।readonly
ক্লাস ব্যবহারে কোডের কমপ্লেক্সিটি বাড়তে পারে, যদি আপনি এমন ডেটা কাঠামো ব্যবহার করেন যা পরিবর্তনশীল হতে পারে।PHP 8.3-এ Readonly Classes ফিচারটি কোডের সঠিকতা, নিরাপত্তা, এবং স্থিতিশীলতা বাড়ানোর জন্য একটি শক্তিশালী টুল। এটি আপনাকে একটি immutable অবজেক্ট ডিজাইন করতে সহায়তা করে, যা কোডের সঠিকতা এবং নিরাপত্তা নিশ্চিত করে। তবে, এটি কিছু পরিস্থিতিতে inheritance এবং flexibility সীমাবদ্ধ করতে পারে, তাই এটি ব্যবহারের আগে আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুসারে সিদ্ধান্ত নেওয়া উচিত।
PHP 8.2-এ readonly
classes এর ধারণা আনা হয়েছে, যা অবজেক্টের সমস্ত প্রপার্টিকে immutable (অপরিবর্তনীয়) করে তোলে। এটি ক্লাসের অভ্যন্তরে সমস্ত প্রপার্টির জন্য readonly
বৈশিষ্ট্য প্রয়োগ করে, যার ফলে সেই প্রপার্টিগুলোর মান একবার ইনিশিয়ালাইজ হওয়ার পর আর পরিবর্তন করা যাবে না।
readonly
Classes কী?PHP 8.2-এ readonly
কিওয়ার্ডের মাধ্যমে আপনি একটি পুরো ক্লাসকে "immutable" বা অপরিবর্তনীয় করতে পারবেন, অর্থাৎ সেই ক্লাসের সমস্ত প্রপার্টি শুধুমাত্র constructor বা ইনিশিয়ালাইজারের মাধ্যমে সেট করা যাবে এবং তার পর সেগুলোর মান আর পরিবর্তন করা যাবে না। এটি readonly প্রপার্টির সুবিধাকে আরও শক্তিশালী করে তোলে এবং একটি ক্লাসের সমস্ত প্রপার্টি একসাথে immutable করে তোলে।
readonly class Product {
public string $name;
public float $price;
public function __construct(string $name, float $price) {
$this->name = $name;
$this->price = $price;
}
}
$product = new Product("Laptop", 999.99);
// Valid, since it's set during object construction
echo $product->name; // Output: Laptop
// Invalid, since the property is readonly
$product->name = "Phone"; // Error: Cannot modify readonly property
এখানে, Product
ক্লাসটি readonly
হিসেবে ডিফাইন করা হয়েছে, যার মানে হলো, ক্লাসের name
এবং price
প্রপার্টিগুলির মান একবার ইনিশিয়ালাইজ হওয়ার পর তা পরিবর্তন করা যাবে না।
readonly
ক্লাসের মাধ্যমে আপনি নিশ্চিত করতে পারেন যে ক্লাসের কোনো প্রপার্টি পরিবর্তনযোগ্য হবে না, যা অবজেক্টের অবস্থা অপরিবর্তিত রাখে এবং আপনার কোডকে নিরাপদ ও সঠিক রাখে।readonly
ক্লাসগুলি কোডের পাঠযোগ্যতা এবং পূর্বানুমানযোগ্যতা উন্নত করে, কারণ আপনি জানেন যে কোনো পরিবর্তনযোগ্য প্রপার্টি নেই এবং অবজেক্টের স্টেট একবার সেট হওয়ার পর অপরিবর্তিত থাকবে।readonly
হিসেবে ডিফাইন করা হলে, তা পরিবর্তন করা যাবে না। তবে এটি শুধুমাত্র constructor বা ইনিশিয়ালাইজারের মাধ্যমে প্রপার্টি সেট করা যাবে।readonly
ক্লাসের একটি সীমাবদ্ধতা হল, আপনি যদি এই ক্লাসটিকে extend করতে চান, তবে তার প্রপার্টি readonly
থাকবে না। এটি শুধুমাত্র মূল ক্লাসে প্রযোজ্য।readonly class User {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
$user = new User("Alice", 25);
// Valid: Accessing properties
echo $user->name; // Output: Alice
echo $user->age; // Output: 25
// Invalid: Attempt to modify readonly properties
$user->name = "Bob"; // Error: Cannot modify readonly property
এখানে, User
ক্লাসটি readonly
হিসেবে ডিফাইন করা হয়েছে। ফলে, name
এবং age
প্রপার্টিগুলির মান একবার ইনিশিয়ালাইজ হওয়ার পর এগুলোর মান পরিবর্তন করা যাবে না। এটি কোডের সঠিকতা এবং সুরক্ষা নিশ্চিত করে।
PHP 8.2-এ readonly
classes এর মাধ্যমে আপনি ক্লাসের প্রপার্টিগুলোর immutability সহজেই নিশ্চিত করতে পারেন, যার ফলে কোডে পূর্বানুমানযোগ্যতা, সুরক্ষা, এবং স্থিতিশীলতা বৃদ্ধি পায়। এই ফিচারটি একটি শক্তিশালী উপায় হিসেবে ব্যবহৃত হয়, যখন আপনি চান যে আপনার অবজেক্টের প্রপার্টি একবার সেট হওয়ার পর আর পরিবর্তিত না হয়। এটি কোডের নিরাপত্তা এবং পারফরম্যান্স উন্নত করতে সহায়ক।
PHP 8.1-এ readonly ফিচারটি একটি নতুন বৈশিষ্ট্য হিসেবে যোগ করা হয়েছে, যা ক্লাসের প্রপার্টির উপর immutable বা অপরিবর্তনীয়তা (immutability) আরোপ করতে সাহায্য করে। Readonly classes এমন ক্লাস যা তার প্রপার্টি একবার ইনিশিয়ালাইজ করার পর আর পরিবর্তন করতে দেয় না। এটি বিশেষত সেই পরিস্থিতিতে কার্যকর, যেখানে আপনি চান যে একটি অবজেক্টের প্রপার্টি পরিবর্তন না হয়ে শুধুমাত্র একবার সেট হোক।
একটি readonly class হল এমন একটি ক্লাস যেগুলোর readonly প্রপার্টি থাকে, যেগুলি একবার সেট হওয়ার পর আর পরিবর্তন করা যায় না। এটি কোডের নিরাপত্তা, ডেটার সঠিকতা এবং স্থিতিশীলতা নিশ্চিত করে, কারণ একবার কোনো অবজেক্টের প্রপার্টি সেট হলে, তা আর পরিবর্তন হতে পারে না।
class User {
public readonly string $name;
public readonly int $age;
// Constructor to initialize the readonly properties
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
$user = new User("Alice", 30);
echo $user->name; // Output: Alice
echo $user->age; // Output: 30
// Trying to change the readonly properties will result in an error
// $user->name = "Bob"; // Error: Cannot modify readonly property
// $user->age = 25; // Error: Cannot modify readonly property
ব্যাখ্যা:
name
এবং age
প্রপার্টি readonly
হিসেবে ডিফাইন করা হয়েছে, অর্থাৎ একবার তাদের মান সেট হলে তা পরবর্তীতে পরিবর্তন করা যাবে না।new User("Alice", 30)
কলের মাধ্যমে name
এবং age
এর মান সেট করা হয়েছে, এবং তারপর এগুলো অ্যাক্সেস করা হয়েছে।readonly
প্রপার্টি পরিবর্তন করার চেষ্টা করেন, PHP একটি compile-time error দিবে।ধরা যাক, আপনি একটি immutable object তৈরি করতে চান যেখানে বিভিন্ন প্রপার্টি থাকবে যেগুলোর মান পরিবর্তন করা যাবে না।
class Product {
public readonly string $productName;
public readonly float $price;
public readonly string $category;
public function __construct(string $productName, float $price, string $category) {
$this->productName = $productName;
$this->price = $price;
$this->category = $category;
}
public function displayProductDetails(): void {
echo "Product: $this->productName\n";
echo "Price: $this->price\n";
echo "Category: $this->category\n";
}
}
// Create a new product object
$product = new Product("Laptop", 1200.00, "Electronics");
$product->displayProductDetails();
// Trying to modify the properties will throw an error
// $product->price = 1000; // Error: Cannot modify readonly property
এখানে Product
ক্লাসের মধ্যে ৩টি readonly প্রপার্টি রয়েছে: productName
, price
, এবং category
। একবার তাদের মান ইনিশিয়ালাইজ করা হলে, পরবর্তীতে তাদের পরিবর্তন করা যাবে না। এটি ডেটার নিরাপত্তা নিশ্চিত করে, কারণ কেউ অবজেক্টের প্রপার্টি ভুলভাবে পরিবর্তন করতে পারবে না।
এছাড়া, আপনি যদি অ্যারে বা অন্যান্য কমপ্লেক্স ডেটা স্ট্রাকচার ব্যবহার করেন, তবে আপনি readonly প্রপার্টি ব্যবহার করতে পারেন যাতে একবার সেট হলে সেই অ্যারের উপাদানগুলি পরিবর্তন করা না হয়।
class Configuration {
public readonly array $settings;
public function __construct(array $settings) {
$this->settings = $settings;
}
public function getSetting(string $key): mixed {
return $this->settings[$key] ?? null;
}
}
// Create a new Configuration object with readonly array
$config = new Configuration([
'database_host' => 'localhost',
'database_name' => 'app_db'
]);
echo $config->getSetting('database_host'); // Output: localhost
// Attempting to modify the readonly property will result in an error
// $config->settings['database_host'] = '127.0.0.1'; // Error: Cannot modify readonly property
এখানে, settings
অ্যারে readonly হিসেবে ডিফাইন করা হয়েছে, যার মান একবার সেট হওয়ার পর পরিবর্তন করা যাবে না। এটি ডেটার ইন্টেগ্রিটি বজায় রাখে এবং কোডের সুরক্ষা নিশ্চিত করে।
ক্লাসে readonly প্রপার্টি এবং interfaces ব্যবহার করেও আপনি আরো শক্তিশালী ডিজাইন তৈরি করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ইন্টারফেস ডিফাইন করতে পারেন যা কিছু অবজেক্টের প্রপার্টি readonly থাকবে এবং তারা ইন্টারফেসের কিছু নির্দিষ্ট বৈশিষ্ট্য মেনে চলবে।
interface ProductInterface {
public function getProductName(): string;
public function getProductPrice(): float;
}
class ImmutableProduct implements ProductInterface {
public readonly string $productName;
public readonly float $productPrice;
public function __construct(string $productName, float $productPrice) {
$this->productName = $productName;
$this->productPrice = $productPrice;
}
public function getProductName(): string {
return $this->productName;
}
public function getProductPrice(): float {
return $this->productPrice;
}
}
$product = new ImmutableProduct("Smartphone", 500);
echo $product->getProductName(); // Output: Smartphone
echo $product->getProductPrice(); // Output: 500
এখানে, ImmutableProduct
ক্লাসটি ProductInterface
ইন্টারফেস ইমপ্লিমেন্ট করে, এবং এর মধ্যে readonly প্রপার্টি ব্যবহার করা হয়েছে যাতে প্রপার্টির মান একবার ইনিশিয়ালাইজ হওয়ার পর পরিবর্তন করা না যায়।
PHP 8.1 এ readonly classes এবং প্রপার্টি একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা কোডের ইন্টেগ্রিটি এবং সঠিকতা নিশ্চিত করতে সাহায্য করে। যখন একটি ক্লাসের প্রপার্টি একবার সেট করা হয় এবং পরিবর্তন করা সম্ভব হয় না, তখন কোডের স্থিতিশীলতা এবং নিরাপত্তা বৃদ্ধি পায়। Readonly প্রপার্টি ব্যবহার করে আপনি immutable objects তৈরি করতে পারেন, যা কোডের রক্ষণাবেক্ষণকে সহজ করে এবং ভবিষ্যৎ ত্রুটি বা ভুল কমাতে সহায়ক হয়।
Read more